Skip to content

feat: add DSV4 B300 Dynamo-SGLang MTP configuration / 新增 DSV4 B300 Dynamo-SGLang MTP 配置 - #2363

Merged
Ankur-singh merged 10 commits into
mainfrom
dsv4-fp4-b300-dynamo-sglang-mtp
Jul 30, 2026
Merged

Ankur-singh merged 10 commits into
mainfrom
dsv4-fp4-b300-dynamo-sglang-mtp

Conversation

@RohitNagraj

@RohitNagraj RohitNagraj commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add a DSV4 B300 disaggregated Dynamo-SGLang MTP configuration for 8K input and 1K output across eight operating points
  • use the stock deepseek-ai/DeepSeek-V4-Pro checkpoint staged at /scratch/models/DeepSeek-V4-Pro
  • clone NVIDIA/srt-slurm from main, pin commit c180328b98c3793ca84a1e24a030f90545eb7d5d, and overlay eight recipes checked into this repository
  • configure EAGLE speculative decoding with use_chat_template: true and UCX_TLS=cuda_copy,rc for every topology, without a UCX_NET_DEVICES allowlist
  • keep --no-preflight scoped to the compute-node-local /scratch/models path
  • track the corresponding srt-slurm contribution in NVIDIA/srt-slurm#281; this configuration does not fetch that pull request branch, and can switch to the recipes on main after it is merged

中文说明

  • 新增 DSV4 B300 分离式 Dynamo-SGLang MTP 配置,覆盖 8K 输入、1K 输出和八个运行点
  • 使用标准 deepseek-ai/DeepSeek-V4-Pro 检查点,节点本地路径为 /scratch/models/DeepSeek-V4-Pro
  • main 克隆 NVIDIA/srt-slurm,固定到提交 c180328b98c3793ca84a1e24a030f90545eb7d5d,并覆盖本仓库内置的八个 recipe
  • 为所有拓扑配置 EAGLE 投机解码、use_chat_template: trueUCX_TLS=cuda_copy,rc,且不添加 UCX_NET_DEVICES 白名单
  • 仅对计算节点本地的 /scratch/models 路径启用 --no-preflight
  • 对应的 srt-slurm 变更见 NVIDIA/srt-slurm#281;当前配置不会获取该 PR 分支,待其合并后可改用 main 中的 recipe

中文:新增 DSV4 FP4 B300 Dynamo-SGLang MTP 配置,并接入启用聊天模板输入和 EAGLE 投机解码的共享 srt-slurm 配方矩阵。
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

中文:将性能变更日志链接更新为 #2363
Comment thread runners/launch_b300-nv.sh
Comment on lines +82 to +84
elif [[ $FRAMEWORK == "dynamo-sglang" && $MODEL_PREFIX == "dsv4" && $PRECISION == "fp4" ]]; then
git clone --branch main --single-branch https://github.com/NVIDIA/srt-slurm.git "$SRT_REPO_DIR"
cd "$SRT_REPO_DIR" || exit 1

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 The new dynamo-sglang + dsv4 + fp4 branch clones srt-slurm with git clone --branch main --single-branch ... but never pins a commit afterward, unlike the closest analogous case (minimaxm3 mtp) which also clones main but then checks out a fixed SHA. Since this benchmark's CONFIG_FILE entries depend on the recipes/dsv4-pro/sglang/b300-fp4/8k1k-mtp.yaml matrix living on upstream main, a future unrelated commit to NVIDIA/srt-slurm could silently change or break this recipe with no corresponding InferenceX change. Consider adding a git checkout <sha> right after the clone to pin reproducibility.

Extended reasoning...

The bug: The new elif branch added for FRAMEWORK==dynamo-sglang && MODEL_PREFIX==dsv4 && PRECISION==fp4 (runners/launch_b300-nv.sh:82-84) does:

git clone --branch main --single-branch https://github.com/NVIDIA/srt-slurm.git "$SRT_REPO_DIR"
cd "$SRT_REPO_DIR" || exit 1

with no follow-up git checkout <sha> to pin a revision. From that point forward, whatever srtctl apply runs, and whatever recipes/dsv4-pro/sglang/b300-fp4/8k1k-mtp.yaml matrix selectors resolve to (override_tp4_tp4, zip_override_dep4_dep8[0..5], etc., as referenced by the new dsv4-fp4-b300-dynamo-sglang-mtp config entries in configs/nvidia-master.yaml), is whatever happens to be on NVIDIA/srt-slurm's main branch at the moment CI runs — not a fixed, known-good state.\n\nWhy this isn't obviously fine: One verifier raised a fair refutation — several other branches in this same if/elif chain also track floating branches rather than pinned commits: the dynamo-vllm dsv4 case checks out aflowers/vllm-gb200-v0.20.0, and the generic minimaxm3 / final-else cases check out sa-submission-q2-2026. So it's not literally true that every branch pins an exact commit SHA, and tracking a named branch is an established pattern here, not unprecedented.\n\nHowever, the most directly comparable case undercuts that defense: the minimaxm3-mtp branch (added earlier, also on B300, also git clone --branch main --single-branch) does the exact same clone-from-main, and then immediately adds git checkout c1b6b5c97f323baefad577d70c4e8392b6f537d9 to pin it. That's the one other place in this file that clones main specifically (as opposed to a purpose-built long-lived feature/submission branch like sa-submission-q2-2026 or aflowers/vllm-gb200-v0.20.0), and it treats main as too volatile to leave unpinned. This new dsv4 dynamo-sglang branch clones the same main and skips that step, which is the actual inconsistency — not 'every branch pins a SHA' but 'every branch that clones the fast-moving default branch also pins a SHA afterward, except this one.'\n\nConcrete failure mode: Suppose next month NVIDIA/srt-slurm's maintainers rename or restructure recipes/dsv4-pro/sglang/b300-fp4/8k1k-mtp.yaml (or change what override_dep4_tp4/zip_override_dep4_dep8[N] select) as part of unrelated matrix cleanup. The next CI run of this InferenceX config silently picks up that change: CONFIG_PATH=${CONFIG_FILE%%:*} would either fail to resolve (caught by the new existence check added in this same PR) or, worse, resolve to a matrix entry whose topology/settings have shifted, producing a benchmark result that doesn't match what was recorded when this PR was authored — with zero corresponding diff in this repo to explain the change. That defeats the reproducibility goal that the pinned-SHA convention elsewhere in this file exists to protect.\n\nFix: Add a git checkout <commit-sha> immediately after the clone/cd, mirroring the minimaxm3-mtp pattern, pinned to whatever commit on NVIDIA/srt-slurm currently contains PR #281's merged matrix.\n\nSeverity: This is a nit, not a blocker — the run works correctly today (assuming srt-slurm#281 is already merged to main), and the failure mode is future drift rather than an immediate correctness problem at merge time.

中文:将 B300 DSV4 Dynamo-SGLang 配置指向服务器上预置的 DeepSeek-V4-Pro-NVFP4 模型路径。
固定 srt-slurm 配方版本,确保 DSV4 B300 Dynamo-SGLang 运行使用可复现的配置。
修复(dsv4):固定包含 UCX CUDA 传输配置的 srt-slurm 版本。
中文:将当前 main 合并到 DSV4 SGLang MTP 配置分支。
Use the stock DeepSeek-V4-Pro FP4 checkpoint, correct recipe labeling, and pin the srt-slurm checkout.\n\n中文:使用标准 DeepSeek-V4-Pro FP4 检查点,修正配置标注,并固定 srt-slurm 版本。
@RohitNagraj RohitNagraj changed the title feat: add DSV4 FP4 B300 Dynamo-SGLang MTP configuration / 新增 DSV4 FP4 B300 Dynamo-SGLang MTP 配置 feat: add DeepSeek-V4-Pro FP4 B300 Dynamo-SGLang MTP configuration / 新增 DeepSeek-V4-Pro FP4 B300 Dynamo-SGLang MTP 配置 Jul 29, 2026
Pin NVIDIA/srt-slurm main, overlay the checked-in recipes, and enable CUDA-aware UCX transport for every MTP topology.

修复:固定 NVIDIA/srt-slurm main 提交,覆盖仓库内置配方,并为所有 MTP 拓扑启用支持 CUDA 的 UCX 传输。
同步最新 main 分支,并将 DSV4 MTP 变更日志条目保留在文件末尾。
@RohitNagraj RohitNagraj changed the title feat: add DeepSeek-V4-Pro FP4 B300 Dynamo-SGLang MTP configuration / 新增 DeepSeek-V4-Pro FP4 B300 Dynamo-SGLang MTP 配置 feat: add DSV4 B300 Dynamo-SGLang MTP configuration / 新增 DSV4 B300 Dynamo-SGLang MTP 配置 Jul 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 30431632620

@Ankur-singh

Copy link
Copy Markdown
Collaborator

As a PR reviewer and CODEOWNER, I have reviewed this and have:

  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. Run Sweep 30431632620
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. Run Sweep 30431632620
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.

Additional detail section:

  • Exact-head evidence: Run Sweep 30431632620 passed all eight applicable multi-node 8k1k MTP benchmark jobs and all seven materialized non-skipped multi-node eval jobs on 75cb57923ffa39e2ceda3ad45ac7c9f6e924f13f.
  • Every added MTP recipe sets use_chat_template: true. The decode configurations use the model's native EAGLE/MTP path with 3 steps / 4 draft tokens for six topologies, 2 / 3 at 6p1d, and 1 / 2 at 8p1d.
  • The agentic synthetic-acceptance criterion is not applicable: this PR introduces no agentic workload. Its non-agentic MTP workloads use chat-template inputs rather than simulated synthetic acceptance.
  • The model architecture is unchanged: the recipes use native SGLang EAGLE/MTP configuration and contain no --hf-overrides or reduced-FLOP architecture hack.
  • Single-node recipe publication criteria are not applicable: this PR adds only multi-node disaggregated SGLang recipes.
  • The submission uses the upstream lmsysorg/sglang:nightly-dev-cu13-20260721-8905cbd4 image, and SGLang is the submitted inference engine; no additional-framework ordering exception is needed.
  • The diff contains no inference-engine or serving-stack patch. The runner copies the checked-in recipes into pinned srt-slurm and edits only the recipe job name; it does not rewrite engine sources, site-packages, or container files and does not install a forked/rebuilt engine wheel. No waiver is required.

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — Ankur-singh is a named owner of configs/nvidia-master.yaml; all other changed paths fall under the catch-all, which a recognized CODEOWNER satisfies.
✅ Check 1 (passing sweep on in-PR commit): PASS — head 75cb579 (still the PR tip) has all 8 multi-node 8k1k / and all 7 materialized multi-node eval / check-runs success (executed, not skipped) from run 30431632620, a pull_request sweep pinned to this exact SHA.
✅ Check 2 (evals pass): PASS — agg_eval_all.json from that run has 7 GSM8K rows for dsv4/fp4/B300/dynamo-sglang/mtp, em_strict 0.964–0.971 (n_eff 1319), all on the PR's exact image lmsysorg/sglang:nightly-dev-cu13-20260721-8905cbd4.
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission (all recipes under benchmarks/multi_node/srt-slurm-recipes/**, master entry multinode: true + disagg: true); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 30431632620 posted by Ankur-singh (COLLABORATOR).
✅ Check 5 (latest checklist): PASS — every item of the current docs/PR_REVIEW_CHECKLIST.md template is present and checked, including the agentic golden-AL and no-engine-patch items.
✅ Check 6 (upstream image / engine-first): PASS — image is upstream lmsysorg/sglang:nightly-dev-cu13-20260721-8905cbd4, and upstream SGLang entries dsv4-fp4-b300-sglang / dsv4-fp4-b300-sglang-mtp already exist on main for the same model-prefix + SKU, so the dynamo-sglang entry respects engine-first ordering.
✅ Check 7 (no architecture hacks): PASS — no --hf-overrides / model-override args / model-config edits; env toggles (SGLANG_OPT_*, SWA ratios) are kernel/memory knobs, not FLOP reductions.
✅ Check 8 (spec-decode chat templates): PASS — all 8 EAGLE/MTP recipes set use_chat_template: true in their benchmark blocks.
✅ Check 9 (no engine patches): PASS — launcher clones srt-slurm at a pinned commit, copies the checked-in recipes, and seds only the recipe job name:; no engine sources, site-packages, or container files are modified and no rebuilt engine wheel is installed.
➖ Check 10 (agentic golden AL): N/A — no agentic workloads in this PR, and no synthetic-acceptance knobs appear on these non-agentic spec-decode configs.

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — Ankur-singh is a named owner of configs/nvidia-master.yaml; the remaining changed paths fall under the catch-all, which a recognized CODEOWNER satisfies.
✅ Check 1 (sweep on in-PR commit): PASS — run 30431632620 on in-PR commit 75cb5792: all 8 multi-node 8k1k / and all 7 executed multi-node eval / check-runs concluded success (no skipped-counted-as-pass).
✅ Check 2 (evals pass): PASS — downloaded eval_results_all/agg_eval_all.json from that run: 7 dsv4 fp4 B300 dynamo-sglang MTP lanes, gsm8k em_strict 0.9636–0.9712 (n_eff 1319), and the eval jobs ran the same lmsysorg/sglang:nightly-dev-cu13-20260721-8905cbd4 image as this PR's config.
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission (benchmarks/multi_node/srt-slurm-recipes/**, multinode: true, disagg: true, framework: dynamo-sglang); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 30431632620 posted by Ankur-singh (COLLABORATOR).
✅ Check 5 (latest checklist): PASS — every item in the current docs/PR_REVIEW_CHECKLIST.md template is present and checked in the sign-off.
✅ Check 6 (upstream image / engine-first): PASS — image is upstream lmsysorg/sglang:nightly-dev-cu13-20260721-8905cbd4, and SGLang entries dsv4-fp4-b300-sglang / dsv4-fp4-b300-sglang-mtp already exist for this model+SKU, so dynamo-sglang ordering is satisfied.
✅ Check 7 (no architecture hacks): PASS — no --hf-overrides / model-override args; recipes use native SGLang EAGLE/MTP flags, and env knobs are perf/harness toggles only.
✅ Check 8 (spec-decode chat template): PASS — all 8 MTP recipes set use_chat_template: true in the sa-bench block.
✅ Check 9 (no engine patches): PASS — diff adds only recipe YAMLs, a master-config entry, and a changelog row; no patching of the pinned image, so no waiver needed.
➖ Check 10 (agentic golden AL): N/A — no agentic spec-decode changes, and no simulated-acceptance knobs appear on these non-agentic MTP configs.

@Ankur-singh
Ankur-singh merged commit b6abf19 into main Jul 30, 2026
28 checks passed
@Ankur-singh
Ankur-singh deleted the dsv4-fp4-b300-dynamo-sglang-mtp branch July 30, 2026 00:22
edwingao28 added a commit that referenced this pull request Aug 6, 2026
… gb300 dsv4 能耗配方镜像换成仍在线的 nightly

原 pin nightly-dev-cu13-20260520 已从 Docker Hub 过期删除(404),gb300 无 sqsh 缓存,lane 无法拉起。换成 B300 DSV4 家族(#2362/#2363)在用且仍在线的 nightly-dev-cu13-20260721-8905cbd4;仅动两个 power 点位,其余 gb300 dsv4 配方保持原 pin。
edwingao28 added a commit that referenced this pull request Aug 19, 2026
…gm 能耗采集到 gb dsv4 与 qwen3.5 fp4 (#2507)

* [Power] feat: extend dcgm energy lanes to gb dsv4/qwen3.5 fp4 / 扩展 dcgm 能耗采集到 gb dsv4 与 qwen3.5 fp4

recipe 侧:5 个 DSV4 8k1k 点位与 qwen3.5-fp4 gb300 lowlat 配方加 telemetry 块(gb300 用 19401 端口)。launcher 侧:gb200 dsv4 分支在 power 时改克隆 pinned producer;gb300 新增仅 power 生效的 dsv4 路由(非 power 路径保持原样);precision 门换成 framework 门(dynamo-sglang 之外仍然快速失败)。契约测试同步:recipe 白名单 8 项 + 逐配方 telemetry 断言。

* [Power] fix: no-preflight + numa1 model path for node-local fp4 power lanes / 为 node-local fp4 能耗 lane 加 no-preflight 与 numa1 模型路径

两个 canary 都死在同一处:模型在 compute-node 本地盘(gb200 /mnt/numa1、gb300 /scratch),login 侧 runner stat 不到,srtctl preflight 必然误报。沿用 repo 已有豁免机制(agentic/glm5.1/qwen3.5-fp8 同款),范围限定 USES_DCGM_POWER=1;gb200 power lane 的 MODEL_PATH 指向 agentic 与 llm-d 实测在用的 /mnt/numa1 检查点,共享的 lustre 路径保持不动。

* [Power] fix: bump gb300 dsv4 power recipes to a live sglang nightly / gb300 dsv4 能耗配方镜像换成仍在线的 nightly

原 pin nightly-dev-cu13-20260520 已从 Docker Hub 过期删除(404),gb300 无 sqsh 缓存,lane 无法拉起。换成 B300 DSV4 家族(#2362/#2363)在用且仍在线的 nightly-dev-cu13-20260721-8905cbd4;仅动两个 power 点位,其余 gb300 dsv4 配方保持原 pin。

* [Power] fix: bump dead gb300 dsv4 image pin in nvidia-master / 修正 nvidia-master 中已失效的 gb300 dsv4 镜像 pin

launcher 的 import_squash 用的是 master yaml 的 image 字段,0520 nightly 已被 Docker Hub GC;与配方一致换成仍在线的 0721(B300 DSV4 家族同款)。仅动 dsv4-fp4-gb300-dynamo-sglang 一个 key,mtp key 不碰。

* fix(power): sync dsv4 gb300 images and drop dead launcher branch

* fix(changelog): restore entry separator lost in merge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants